'use strict'
// 1.字符串类型''."".``
var aName = '貂蝉'
// 2.数值类型
var dAge = 18
dAge = 18.13
dAge = -18
// 3.布尔值类型 true / false
var isSingDog = true
isSingDog = false
// isSingDog = 1
// 4.undefined 和 null
var und = undefined
var nul = null
//5. 数组
var arrjs = [1, '2', true, [], {}]
// let arr: string[]
var arr
arr = ['1', '2']
var ageArr = [1, 2, 3]
var numArr = ['1', '2']
// 6 元祖(tuple):就是一个已知元素数量和每个元素类型的数组,内部的元素类型 不必相同
var tup1 = ['1', 1, true]
tup1[0] = '22222'
// tup1[1] = '2222' 报错
// tup1 = ['1',1,false,2] 报错
// 访问 元祖中元素 和 长度
console.log(tup1.length)
console.log(tup1[0])
// 7枚举(enum):用一组标识 来 代表 数值,方便程序猿调用理解
// 7.1 创建性别枚举
var Gender
;(function (Gender) {
  Gender[(Gender['Boy'] = 0)] = 'Boy'
  Gender[(Gender['Girl'] = 1)] = 'Girl'
  Gender[(Gender['Uknown'] = 2)] = 'Uknown'
})(Gender || (Gender = {}))
var userSex = Gender.Boy
console.log(userSex)
// 7.2 使用性别枚举
// 8.任意类型(any):可以用来代表任意类型,一般用来获取 dom 对象使用
var btn = document.getElementById('btn')
// 9.空类型(void):可以用来表示函数的无返回值
function say() {
  console.log(11111)
}
// 11.其他类型(never):可以用来表示不会出现的值 - 常用在 有抛出异常 或 无限循环的函数 返回值类型声明处
// 补充:never类型是Ts中的底部类型,所有类型都是never类型的父类
// 所以never类型值可以赋值给任意类型的变量
function test() {
  while (true) {}
}
function test2() {
  throw new Error('哈哈')
}
var x = test()
var y = test()
// 类型推断
// 概念:如果变量的声明和初始化是在同一行,可以省略掉变量的类型的声明
var a = 13
// a= 'sss' 报错
// 联合类型
// 概念: 表示取值可以为多种类型中的一种
var lianhe = 123
lianhe = 'www'
// 案例
// prompt函数的返回值可能是字符串也可能是null
var mName = prompt('你输入小狗狗的名字')
console.log(mName)
